package futbol.tacticas.concursantes.TacticaRugarsae;
/*
 * TacticaRugarsae.java
 *
 * Created on 8 de mayo de 2008, 21:33
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

import futbol.General;
import java.awt.*;
import java.util.Vector;
import futbol.tacticas.*;
import futbol.tacticas.concursantes.Tactica;

/**
 *
 * @author Administrador
 */
public class TacticaRugarsae implements Tactica{
    
    private int nValores[][]={
        {-152,0,3,-152,0}, //1 Portero [0]
        {-110,90,6,-110,40}, //2 Lateral derecho [1]
        {-110,-90,6,-110,-40}, //3 Lateral izquierdo [2]
        {-120,30,3,-85,15}, //4 Central derecho [3]
        {-120,-30,1,-85,-15}, //5 Central izquierdo [4]
        {-25,20,2,-35,20}, //6 Interior derecho [5]
        {100,-60,7,80,-30}, //7 Enganche [6]
        {20,100,5,0,60}, //8 Extremo derecho [7]
        {120,30,7,100,30}, //9 Delantero [8]
        {-15,-25,7,-25,-20}, //10 Interior izquierdo [9]
        {20,-100,5,0,-60} //11 Extremo izquierdo [10]
    };

    public String getNombre(){
        return "Rugarsae";
    }
    
    public Color getColor1(){
        return Color.orange;
    }
    
    public Color getColor2(){
        return Color.orange;
    }
    
    public Color getColorNumero(){
        return Color.black;
    }
    
    public int getFuerza(int n){
        return nValores[n][2];
    }
    public int getXInicial(int n){
        return nValores[n][0];
    }
    
    public int getYInicial(int n){
        return nValores[n][1];
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj){
        Vector<Comando> comandos=new Vector();
        
        //Ir a posiciones iniciales
        for (int n=0;n<11;n++)
            if (sj.estoyMasCercaDeBola())
                comandos.add(new ComandoIrA(n, nValores[n][0], nValores[n][1]));
            else
                comandos.add(new ComandoIrA(n, nValores[n][3], nValores[n][4]));
        
        //Ir a por la bola el jugador más cercano
        int nJug=sj.getMasCercanoDeBola();
        Point bola=sj.getBola();
        comandos.add(new ComandoIrA(nJug, bola.getX() , bola.getY()));
        
        //Acompañar el siguiente jugador más cercano
        //siempre y cuando no sea el portero
        int nSigJug=sj.getSiguienteJugador(nJug);
        if (nSigJug != 0)
            comandos.add(new ComandoIrA(nSigJug, bola.getX(), bola.getY()));
        
        //Mover el portero
        int porteroy=(int)(bola.getY()/2);
        if (porteroy<-30) porteroy=-28;
        if (porteroy>30) porteroy=28;
        comandos.add(new ComandoIrA(0, nValores[0][0], porteroy));       
        
        //El portero siempre despeja
        comandos.add(new ComandoTiroAPuerta(0,10));
        
        //Anticiparse en defensa
        /*
        Point contrarios[]=sj.getContrario();
        if (!sj.estoyMasCercaDeBola() && bola.getX()<0){
            for (int n=3;n<4;n++){
                int nJC=sj.getContrarioMasCerca(getXInicial(n), getYInicial(n));
                comandos.add(new ComandoIrA(n, contrarios[nJC].getX()+10, contrarios[nJC].getY()));
            }
        }
        */
        
        //Averiguar donde está el contrario más cercano a la bola
        Point contrarios[]=sj.getContrario();
        Point jugadores[]=sj.getMisJugadores();
        int nJC=sj.getContrarioMasCerca(bola.getX(), bola.getY());
            
        //Tirar a puerta o pasar
        for (int n=1;n<11;n++){    
            if (n==6 || n==8 || n==9){// && sj.estoyMasCercaDeBola()){
                int nDis=(int)(General.getDistancia(bola.getX(), bola.getY(), 160, 0));
                if (nDis<70)
                    comandos.add(new ComandoTiroAPuerta(n,0));
                else
                   //comandos.add(new ComandoGolpearBola(n,bola.getX()+10,bola.getY()));
                   comandos.add(new ComandoTiroAPuerta(n,0));
            }
            else if (n==1)
                 //el lateral derecho la pasa al extremo derecho
                    //if (General.getDistancia(misjugadores[n].getX(), misjugadores[n].getY(), contrarios[nJC].getX(), contrarios[nJC].getY()) > 30)
                        comandos.add(new ComandoPase(1,7));
                    //else
                        //comandos.add(new ComandoGolpearBola(n, misjugadores[n].getX()+10, misjugadores[n].getY()));
            else if (n==2)
                 //el lateral izquierdo la pasa al extremo izquierdo
                //if (General.getDistancia(misjugadores[n].getX(), misjugadores[n].getY(), contrarios[nJC].getX(), contrarios[nJC].getY()) > 30)
                        comandos.add(new ComandoPase(2,10));
                    //else
                        //comandos.add(new ComandoGolpearBola(n, misjugadores[n].getX()+10, misjugadores[n].getY()));
            else if (n==3)
                 //el central derecho la pasa al lateral derecho o despeja
                if (General.getDistancia((jugadores[3].getX()+jugadores[1].getX())/2, (jugadores[3].getY()+jugadores[1].getY())/2, contrarios[nJC].getX(), contrarios[nJC].getY()) > 60)
                    comandos.add(new ComandoPase(3,1));
                else
                    comandos.add(new ComandoTiroAPuerta(n, 0));
            else if (n==4)
                 //el central izquierdo la pasa al lateral izquierdo o despeja
                 if (General.getDistancia((jugadores[4].getX()+jugadores[2].getX())/2, (jugadores[4].getY()+jugadores[2].getY())/2, contrarios[nJC].getX(), contrarios[nJC].getY()) > 60)
                    comandos.add(new ComandoPase(4,2));
                 else
                    comandos.add(new ComandoPase(4, 3));
            else if (n==5)
                 //el interior se la pasa al media punta
                //if (General.getDistancia(misjugadores[n].getX(), misjugadores[n].getY(), contrarios[nJC].getX(), contrarios[nJC].getY()) > 30)
                        comandos.add(new ComandoPase(5,9));
                    //else
                        //comandos.add(new ComandoGolpearBola(n, misjugadores[n].getX()+10, misjugadores[n].getY()));
            else if (n==7)  
                //El extremo derecho pasa al delantero
                comandos.add(new ComandoPase(7,8));
            else if (n==10)
                 //el extremo izquierdo pasa al enganche
                comandos.add(new ComandoPase(10,6));
        }
        
        return comandos;
    }
    
}